home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / webx / webxp040.lzh / Source / gifl.s < prev    next >
Text File  |  1998-07-11  |  15KB  |  893 lines

  1. *    gifl.s
  2.  
  3.  
  4.     .include    DOSCALL.MAC
  5.     .include    gifl.inc
  6.  
  7.     .xdef    _gifdecodemain
  8.  
  9.  
  10.  
  11. * âIâèâWâiâïé╠ main.hasüiâRâüâôâg by Mitsukyüj
  12.  
  13.         .text
  14.         .even
  15.  
  16. a7buf:    .ds.l    1
  17.  
  18. _gifdecodemain:
  19.         movem.l    d3-d7/a3-a6,-(sp)
  20.         move.l    a7,a7buf
  21.  
  22.         move.l    40(sp),a5
  23.         move.l    44(sp),_srcfile(a5)
  24.  
  25.         bsr    get_filesize    * âtâ@âCâïâIü[âvâôüCé┬éóé┼é╔âtâ@âCâïâTâCâYĵô╛
  26.  
  27.         bsr    gif_header_read    * âwâbâ_ë≡É═
  28.         tst.l    d0
  29.         bmi    error
  30.  
  31.         bsr    read_adr_get    * ô╟é▌ì₧é▌üòâüâéâèâZâbâg
  32.         tst.l    d0
  33.         bmi    error
  34.         bsr    gif_decode
  35.  
  36.         move.l    a5,d0
  37.         move.l    a7buf,a7
  38.         movem.l    (sp)+,d3-d7/a3-a6
  39.         rts
  40.  
  41. error:
  42. NO_MEMORY:
  43.         move.l    a7buf,a7
  44.         ori.l    #$80000000,d0
  45.         movem.l    (sp)+,d3-d7/a3-a6
  46.         rts
  47.  
  48.  
  49. *-------------------------------------------------------------------------------
  50. * âtâ@âCâïâIü[âvâôüòëµæ£âfü[â^âtâ@âCâïâTâCâYĵô╛
  51.  
  52. get_filesize:
  53.         moveq.l    #1,d6
  54.         move.w    #0,-(sp)
  55.         move.l    _srcfile(a5),-(sp)
  56.         DOS    _OPEN
  57.         addq.l    #6,sp
  58.         move.w    d0,_file(a5)
  59.         bmi    error
  60.         move.w    #2,-(sp)
  61.         pea.l    0.w
  62.         move.w    _file(a5),-(sp)
  63.         DOS    _SEEK
  64.         move.l    d0,d1
  65.         move.w    #0,6(sp)
  66.         DOS    _SEEK
  67.         addq.l    #8,sp
  68.         move.l    d1,_src_fsize(a5)
  69.         moveq.l    #0,d0
  70.         rts
  71.  
  72.  
  73. *-------------------------------------------------------------------------------
  74. * ô╟é▌ì₧é▌üòâüâéâèâZâbâg
  75.  
  76. read_adr_get:
  77.     tst.b    _gif_hispeed+1(a5)        * âCâôâ^ü[âîâXé⌐üH
  78.     beq    read_adr_get256_normal        * êßéñé╠é╚éτ normal é╓
  79.  
  80. read_adr_get256_interlace:
  81.         clr.b    _gif_hispeed(a5)
  82.         move.w    _line(a5),d0
  83.         mulu.w    _colum(a5),d0
  84.         addq.l    #1,d0
  85.         and.w    #$fffe,d0
  86.         move.l    d0,d1
  87.  
  88.         * âCâôâ^ü[âîâXìéæ¼ôWèJé╠é╜é▀üCÆ╩Åφé╠ö{é╠ë╝æzGRAMé≡ùpê╙
  89.         add.l    d0,d0
  90.  
  91.         add.l    _src_fsize(a5),d0
  92.         movem.l    d1-d2/a0-a2,-(sp)
  93.             move.l    d0,-(sp)
  94.             move.l    d0,_buff_size(a5)
  95. .if 1
  96.             move.w    #2,-(sp)
  97.             DOS    _MALLOC2
  98.             addq.l    #6,sp
  99. .else
  100.             jbsr    _malloc
  101.             addq.l    #4,sp
  102. .endif
  103.         movem.l    (sp)+,d1-d2/a0-a2
  104.         tst.l    d0
  105.         bmi    NO_MEMORY
  106.         move.l    d0,_buff_addr(a5)
  107.         move.l    d0,a1
  108.         adda.l    d1,a1
  109.         move.l    a1,_buff_addr256(a5)
  110. * âtâ@âCâïâoâbâtâ@é≡ò╩é╔èmò█üD
  111.         adda.l    d1,a1
  112.  
  113.             add.l    d1,d1
  114.             add.l    _src_fsize(a5),d1
  115.             move.l    _buff_size(a5),d2
  116.  
  117.             cmp.l    d2,d1
  118.             bhi    error                * ümÅ¡âüâéâèé│éµéñé╚éτün
  119. read_adr_get256_ex_all:
  120.             st.b    _gif_hispeed(a5)
  121.  
  122.             moveq.l    #3,d6
  123.             move.l    _src_fsize(a5),-(sp)
  124.             move.l    a1,-(sp)
  125.             move.w    _file(a5),-(sp)
  126.             DOS    _READ
  127.             lea    10(sp),sp
  128.             tst.l    d0
  129.             bmi    error
  130.         add.l    a1,d0
  131.         move.l    d0,_enddata_addr(a5)
  132.  
  133.         move.w    _file(a5),-(sp)
  134.         DOS    _CLOSE
  135.         addq.l    #2,sp
  136.  
  137.             rts
  138.  
  139.  
  140.  
  141. read_adr_get256_normal:
  142.         move.w    _line(a5),d0
  143.         mulu.w    _colum(a5),d0
  144.         addq.l    #1,d0
  145.         and.w    #$fffe,d0
  146.         move.l    d0,_buff_req(a5)
  147.  
  148.         add.l    _src_fsize(a5),d0
  149.  
  150.         movem.l    d1-d2/a0-a2,-(sp)
  151.             move.l    d0,-(sp)
  152.             move.l    d0,_buff_size(a5)
  153. .if 1
  154.             move.w    #2,-(sp)
  155.             DOS    _MALLOC2
  156.             addq.l    #6,sp
  157. .else
  158.             jbsr    _malloc
  159.             addq.l    #4,sp
  160. .endif
  161.         movem.l    (sp)+,d1-d2/a0-a2
  162.  
  163.         tst.l    d0
  164.         bmi    NO_MEMORY
  165.         move.l    d0,_buff_addr(a5)
  166.         move.l    _buff_req(a5),d2
  167.  
  168.         move.l    d0,a1            *     a1 ü` a1+d2 üü ë╝æzGRAM
  169.         move.l    a1,_buff_addr256(a5)
  170.         adda.l    d2,a1            *  a1+d2 ü`       üü âtâ@âCâïô╟é▌ì₧é▌
  171.  
  172.         move.l    _buff_size(a5),d1
  173.  
  174.         cmp.l    d1,d2
  175.         bhi    error            âüâéâèé¬æ½éΦé±
  176.  
  177.         moveq.l    #3,d6
  178.         move.l    _src_fsize(a5),-(sp)
  179.         move.l    a1,-(sp)
  180.         move.w    _file(a5),-(sp)
  181.         DOS    _READ
  182. stopper:
  183.         lea    10(sp),sp
  184.         tst.l    d0
  185.         bmi    error
  186.         add.l    a1,d0
  187.         move.l    d0,_enddata_addr(a5)
  188.  
  189.         move.w    _file(a5),-(sp)
  190.         DOS    _CLOSE
  191.         addq.l    #2,sp
  192.         rts
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201. * âIâèâWâiâïé╠ gif_load.hasüiâRâüâôâg by Mitsukyüj
  202.  
  203. .comment gif_comment */////////////////////////////////////////////////////////*
  204.  
  205.     GIF decode routine for X680x0
  206.  
  207.                     original program v1.06 by Herzen
  208.  
  209.  
  210. int    gif_header_read()
  211.  
  212. ê°Éö
  213.     é╚é╡
  214.  
  215. û▀éΦÆl
  216.       0    É│ÅφÅIù╣
  217.     òëÉö    âGâëü[
  218.  
  219.  
  220.  
  221. int    gif_decode( short *buff )
  222.  
  223. ê°Éö
  224.     é╚é╡
  225.  
  226. û▀éΦÆl
  227.       0    É│ÅφÅIù╣
  228.     òëÉö    âGâëü[
  229.  
  230.  
  231. gif_comment *//////////////////////////////////////////////////////////////////*
  232.  
  233.  
  234. gif_decode:
  235.         movem.l    d3-d7/a3-a6,-(sp)
  236. *        movea.l    a1,a6
  237. *        suba.l    #FOR_PI256,a6
  238.     lea    gifwork,a6
  239.         clr.w    error_flag(a6)
  240.         movea.l    _buff_addr256(a5),a4
  241.         move.l    _buff_addr(a5),interlace_trans_addr(a6)
  242.         bsr    expand
  243.         movem.l    (sp)+,d3-d7/a3-a6
  244.         rts
  245.  
  246.  
  247. *------------------------------------------------------------------------------*
  248. gif_header_read:
  249.         movem.l    d3-d7/a3-a6,-(sp)
  250.     lea    gifwork,a6
  251.         bsr    gif_header_read_
  252.         movem.l    (sp)+,d3-d7/a3-a6
  253.         rts
  254. gif_header_read_:
  255. *------------------------------------------------------- üméféhéeÄ»ò╩ïLìåün
  256. *                              GIF signature
  257. *                              éUâoâCâgî┼ÆΦ
  258.         bsr    getc
  259.         cmp.b    #'G',d0
  260.         bne    error_
  261.         bsr    getc
  262.         cmp.b    #'I',d0
  263.         bne    error_
  264.         bsr    getc
  265.         cmp.b    #'F',d0
  266.         bne    error_
  267.         bsr    getc
  268.         cmp.b    #'8',d0
  269.         bne    error_
  270.         bsr    getc
  271.         cmp.b    #'7',d0        * 87
  272.         beq    @f
  273.         cmp.b    #'9',d0        * 89
  274.         bne    error_
  275. @@:
  276.         ext.w    d0
  277.         move.w    d0,gif_ver(a6)
  278.         bsr    getc
  279.         cmp.b    #'a',d0
  280.         bne    error_
  281.  
  282. *------------------------------------------------------- ümâXâNâèü[âôÅεò±ün
  283. *                              screen descriptor
  284. *                              éVâoâCâgî┼ÆΦ
  285.  
  286.         bsr    getc        * âXâNâèü[âôé╠ò¥
  287.         move.b    d0,d1
  288.         bsr    getc
  289.         lsl.w    #8,d0
  290.         move.b    d1,d0
  291.         move.w    d0,sc_xsize(a6)
  292.  
  293.         bsr    getc        * âXâNâèü[âôé╠ìéé│
  294.         move.b    d0,d1
  295.         bsr    getc
  296.         lsl.w    #8,d0
  297.         move.b    d1,d0
  298.         move.w    d0,sc_ysize(a6)
  299.  
  300.         moveq.l    #0,d3
  301.         bsr    getc
  302.         btst.l    #7,d0        * âOâìü[âoâïâJâëü[â}âbâvé╠ùLû│
  303.         beq    error_        * û│éóé╠é═Ä╫ô╣é╛
  304.         move.w    d0,d1
  305.         lsr.w    #4,d1        * 
  306.         and.w    #%111,d1    * ÉFë≡æ£ôxüicolor resolutionüj
  307.         addq.w    #1,d1        * é╠ùLî°ârâbâgÉö
  308.         move.w    d1,sc_cr(a6)    *
  309.  
  310.         and.w    #%111,d0    * color pixel bit
  311.         addq.w    #1,d0        *
  312.         move.w    d0,sc_pixel(a6)    * 1âsâNâZâïé╠bitÉö
  313.  
  314.         bsr    getc
  315.         and.w    #$00ff,d0
  316. *        move.w    d0,bg_col(a6)    * öwîiÉF(not used)
  317.  
  318.         bsr    getc        * âAâXâyâNâgüHüiÅ┌ì╫òsû╛üj
  319.         and.w    #$00ff,d0
  320.         move.w    d0,aspect(a6)
  321.  
  322. *------------------------------------------------------- ümâOâìü[âoâïâJâëü[â}âbâvün
  323. *                              global color map
  324. *                              éVâoâCâgî┼ÆΦ
  325.  
  326.         move.w    sc_pixel(a6),d0
  327.         bsr    palet_get    * âpâîâbâgĵô╛
  328.  
  329.         move.w    #0,animated_gif(a6)
  330.  
  331. *------------------------------------------------------- ümëµæ£Åεò±ün
  332. *                              image descriptor
  333. *                              10âoâCâgî┼ÆΦüiâCâüü[âWò¬ùúïLìå è▄üj
  334. *                              é╜é╛é╡üCègÆúâuâìâbâNÅ£é¡
  335.  
  336. to_img_sep_lop:                * âCâüü[âWò¬ùúïLìåé▄é┼ö≥é╬é╖
  337.         bsr    getc
  338.         cmp.b    #IMAGE_SEPARATOR,d0
  339.         beq    img_inf_get
  340.         cmp.b    #TRAILER,d0
  341.         beq    ERROR_DESTROY
  342.         cmp.b    #EXT_INTRODUCER,d0
  343.         bne    ERROR_EXT
  344.         bsr    getc    * ègÆúï@ö\ö╘ìå
  345.         cmp.b    #$F9,d0
  346.         beq    graphic_ctrl_ext
  347.         bsr    getc    * âuâìâbâNâTâCâY
  348. ext_block_lop:
  349.         moveq.l    #0,d1
  350.         move.b    d0,d1
  351.         subq.w    #1,d1
  352. @@:        bsr    getc
  353.         dbra    d1,@b
  354.         bsr    getc
  355.         tst.b    d0    * âuâìâbâNé╔æ▒é½é═éáéΘé⌐üH
  356.         bne    ext_block_lop
  357.         bra    to_img_sep_lop
  358.  
  359. graphic_ctrl_ext:
  360.         bsr    getc    * âuâìâbâNâTâCâY(=4)
  361.         bsr    getc    * Packed Flags
  362.         move.l    d0,d1
  363.  
  364.         bsr    getc    * Delay time
  365.         bsr    getc    * 
  366.         bsr    getc    * Transparent Color Index
  367.         btst.l    #0,d1    * ôºû╛âtâëâO
  368.         bne    gce1
  369.         moveq.l    #$ff,d0
  370. gce1:
  371.         move.w    d0,_tpcolor(a5)    * ôºû╛ÉF
  372.         bsr    getc    * Block Terminator
  373.         bra    to_img_sep_lop
  374.  
  375.  
  376.  
  377. img_inf_get:
  378.         bsr    getc        * ì╢Åπéwì└òWüiëµæ£é╠éwê╩Æuüj
  379.         move.b    d0,d1
  380.         bsr    getc
  381.         lsl.w    #8,d0
  382.         move.b    d1,d0
  383.         move.w    d0,_scolum(a5)
  384.         bsr    getc        * ì╢Åπéxì└òWüiëµæ£é╠éxê╩Æuüj
  385.         move.b    d0,d1
  386.         bsr    getc
  387.         lsl.w    #8,d0
  388.         move.b    d1,d0
  389.         move.w    d0,_sline(a5)
  390.  
  391.         bsr    getc        * ëµæ£é╠ò¥
  392.         move.b    d0,d1
  393.         bsr    getc
  394.         lsl.w    #8,d0
  395.         move.b    d1,d0
  396.         move.w    d0,_colum(a5)
  397.         bsr    getc        * ëµæ£é╠ìéé│
  398.         move.b    d0,d1
  399.         bsr    getc
  400.         lsl.w    #8,d0
  401.         move.b    d1,d0
  402.         move.w    d0,_line(a5)
  403.  
  404.         moveq.l    #31,d6
  405.         bsr    getc        * âìü[âJâïâJâëü[â}âbâvüCâCâôâ^ü[âîâXüCÉFë≡æ£ôx
  406.         clr.b    _gif_hispeed+1(a5)
  407.         btst.l    #6,d0        * Interlaceé⌐üH
  408.         sne.b    _gif_hispeed+1(a5)
  409.  
  410.         btst.l    #7,d0        * âìü[âJâïâJâëü[â}âbâvé≡ùpéóéΘé⌐üH
  411.         beq    @f
  412.         and.w    #%111,d0
  413.         addq.w    #1,d0        * 1âsâNâZâïéáé╜éΦé╠bitÉö
  414.         bsr    palet_get    * ì─ôxĵô╛
  415. @@:
  416.  
  417. *------------------------------------------------------- ümâëâXâ^ü[âfü[â^ün
  418. *                              Raster data
  419.  
  420.         bsr    getc        * pixel_bit
  421.         and.w    #$ff,d0
  422.         move.w    d0,img_CodeSize(a6)
  423.         move.w    #8,_color(a5)    * 256ÉF
  424.         cmp.w    #4,d0
  425.         bhi    @f
  426.         move.w    #4,_color(a5)    * 16ÉF
  427. @@:
  428.         moveq.l    #1,d1
  429.         lsl.w    d0,d1
  430.         ext.l    d1
  431.         subq.l    #1,d1
  432.         move.l    d1,img_BitMask(a6)
  433.  
  434.         move.w    _scolum(a5),d0
  435.         add.w    _colum(a5),d0
  436.         subq.w    #1,d0
  437.         move.w    d0,_ecolum(a5)
  438.         move.w    _sline(a5),d0
  439.         add.w    _line(a5),d0
  440.         subq.w    #1,d0
  441.         move.w    d0,_eline(a5)
  442.  
  443.         moveq.l    #0,d0
  444.         rts
  445.  
  446. error_:
  447.         moveq.l    #-1,d0
  448.         rts
  449.  
  450. *------------------------------------------------------------------------------
  451. *
  452.  
  453. palet_get:
  454.         moveq.l    #1,d2
  455.         lsl.w    d0,d2
  456.         subq.w    #1,d2
  457.  
  458.         lea.l    _pal_buf(a5),a0
  459. palet_loop:
  460.         bsr    getc        * R
  461.         and.w    #$00f8,d0
  462.         rol.w    #3,d0
  463.         move.w    d0,d1
  464.         bsr    getc        * G
  465.         and.w    #$00f8,d0
  466.         ror.w    #8,d0
  467.         or.w    d0,d1
  468.         bsr    getc        * B
  469.         and.w    #$00f8,d0
  470.         ror.w    #2,d0
  471.         or.w    d0,d1
  472.         move.w    d1,(a0)+
  473. @@:        dbra    d2,palet_loop
  474.         rts
  475.  
  476.  
  477. *------------------------------------------------------------------------------
  478. *
  479. *  âfâRü[âhòöâüâCâô
  480. *
  481. *  GIF's LZW ôWèJâïü[â`âô
  482. *
  483.  
  484. expand:
  485.     move.l    a4,vgram(a6)
  486.     move.w    _colum(a5),d0
  487.     mulu.w    _line(a5),d0
  488.     addq.l    #1,d0
  489.     and.w    #$fffe,d0
  490.     move.l    a4,d1
  491.     add.l    d1,d0
  492.     move.l    d0,chk_addr(a6)        * ë╝æzGRAMé╠ì┼ÅIâAâhâîâX
  493.  
  494.     moveq.l    #0,d3
  495.     move.l    d3,d4
  496.     move.l    d3,d5
  497.     move.l    d3,d7
  498.  
  499.     move.l    img_BitMask(a6),d0
  500.     move.w    d0,BitMask(a6)
  501.     move.w    d0,d5
  502.     swap.w    d5
  503.  
  504.     move.w    d3,Interlace(a6)
  505.     tst.b    _gif_hispeed+1(a5)
  506.     sne.b    Interlace+1(a6)
  507.  
  508.     moveq.l    #1,d6            * PreLen
  509.     swap.w    d6            * PreLen ü¿ CodeSize
  510.     move.w    img_CodeSize(a6),d6    * d6.w = CodeSize
  511.     moveq.l    #1,d1
  512.     lsl.w    d6,d1
  513.     move.w    d1,ClearCode(a6)
  514.     addq.w    #1,d1
  515.     move.w    d1,d2            * d2.w = EOFCode
  516.     move.w    d1,EOFCode(a6)
  517.     addq.w    #1,d1
  518.     move.w    d1,d7            * d7.w = FreeCode
  519.     move.w    d1,FirstFree(a6)
  520.  
  521.     addq.w    #1,d6
  522.     move.w    d6,InitCodeSize(a6)
  523.     moveq.l    #1,d1
  524.     lsl.w    d6,d1
  525.     swap.w    d2
  526.     move.w    d1,d2        * MaxCode
  527.     move.w    d1,InitMaxCode(a6)
  528.     subq.w    #1,d1
  529.     move.w    d1,d5        * d5.w = ReadMask
  530.     move.w    d1,InitReadMask(a6)
  531.  
  532.     movea.l    a1,a3        * a3 = RasterData
  533.  
  534.     bsr    RasterGet    * âëâXâ^âfü[â^é≡ĵô╛üD
  535.  
  536.     move.l    a5,-(sp)
  537.  
  538.     lea.l    Length(a6),a5
  539.  
  540.     move.w    d7,d0
  541.     add.w    d0,d0
  542.     lea.l    (a5,d0.w),a1        * Åæé½ì₧é▌ÉΩùp
  543.     move.l    a1,restore_addrs(a6)
  544.     add.w    d0,d0
  545.     lea.l    (a6,d0.w),a2        * Åæé½ì₧é▌ÉΩùp
  546.     move.l    a2,restore_addrs+4(a6)
  547.  
  548. * - decode start!!
  549.  
  550. while_lop:
  551.     readCode
  552.     cmp.w    EOFCode(a6),d1
  553.     beq    while_end
  554.  
  555.         cmp.w    ClearCode(a6),d1
  556.         bne    if1_else
  557.  
  558.             moveq.l    #1,d6
  559.             swap.w    d6
  560.             move.w    InitCodeSize(a6),d6
  561.             move.w    InitMaxCode(a6),d2
  562.             move.w    InitReadMask(a6),d5
  563.             move.w    FirstFree(a6),d7
  564.             readCode
  565.  
  566.             movea.l    restore_addrs(a6),a1
  567.             movea.l    restore_addrs+4(a6),a2
  568.  
  569.             move.b    d1,(a4)+
  570.  
  571.         bra    while_lop
  572. if1_else:
  573.         cmp.l    chk_addr(a6),a4
  574.         bhi    while_end
  575.  
  576.         swap.w    d5            * ReadMask     ü¿ BitMask
  577.         swap.w    d3            * readCodeSize ü¿ FinChar
  578.         swap.w    d6            * EOFCode      ü¿ OldCode
  579.  
  580.         cmp.w    d7,d1            * CurCode >= FreeCode
  581.         bcs    next01
  582.             move.w    d6,d0
  583.             movea.l    a4,a0
  584.             suba.w    d0,a0
  585.  
  586.             addq.w    #1,d6
  587.             cmp.w    #4095,d7
  588.             bhi    @f
  589.             move.w    d6,(a1)+
  590.             move.l    a0,(a2)+
  591. @@:            move.b    (a0)+,(a4)+
  592.             dbra    d0,@b
  593.             bra    if1_else_cont
  594. next01:
  595.         cmp.w    d5,d1
  596.         bls    next02
  597.  
  598.             move.w    d1,d0
  599.             add.w    d0,d0
  600.             move.w    (a5,d0.w),d3    * ìíë±
  601.             add.w    d0,d0
  602.             movea.l    (a6,d0.w),a0
  603.  
  604.         cmp.w    #4095,d7
  605.         bhi    @f
  606.             move.l    a4,d0
  607.             move.w    d6,d1        * æOë±é╠Æ╖é│
  608.             ext.l    d1
  609.             sub.l    d1,d0
  610.             move.l    d0,(a2)+
  611.             addq.w    #1,d1
  612.             move.w    d1,(a1)+
  613. @@:
  614.  
  615.             move.w    d3,d6
  616.             subq.w    #1,d3
  617. @@:            move.b    (a0)+,(a4)+
  618.             dbra    d3,@b
  619.  
  620.             bra    if1_else_cont
  621.  
  622. next02:
  623.             move.w    d1,d3
  624.  
  625.         cmp.w    #4095,d7
  626.         bhi    @f
  627.             move.l    a4,d0
  628.             move.w    d6,d1    * æOë±é╠Æ╖é│
  629.             ext.l    d1
  630.             sub.l    d1,d0
  631.             move.l    d0,(a2)+
  632.             addq.w    #1,d1
  633.             move.w    d1,(a1)+
  634. @@:
  635.             move.w    #1,d6
  636.             move.b    d3,(a4)+
  637.  
  638. *            bra    if1_else_cont
  639.  
  640. if1_else_cont:
  641.         addq.w    #1,d7        * FreeCode
  642.  
  643.         swap.w    d5        * BitMask ü¿ ReadMask
  644.         swap.w    d3        * FinChar ü¿ readCodeSize
  645.         swap.w    d6        * OldCode ü¿ EOFCode
  646.  
  647.         cmp.w    d2,d7        * MaxCode, FreeCode
  648.         bcs    while_lop
  649.             cmp.w    #12,d6
  650.             bcc    while_lop
  651.                 addq.w    #1,d6
  652.                 add.w    d2,d2
  653.                 moveq.l    #1,d1
  654.                 lsl.w    d6,d1
  655.                 subq.w    #1,d1
  656.                 move.w    d1,d5    * ReadMask
  657. @@:
  658. endif1:
  659.     bra    while_lop
  660. while_end:
  661.     move.l    (sp)+,a5
  662.  
  663.     tst.w    Interlace(a6)
  664.     bne    to_interlace
  665.  
  666.     moveq.l    #0,d0
  667.     rts
  668.  
  669. *------------------------------------------------------------------------------
  670. *
  671. *  âCâôâ^ü[âîâXò╧è╖
  672. *
  673.  
  674. to_interlace:
  675.     movea.l    interlace_trans_addr(a6),a4    * ò╧è╖ɵ
  676.     movea.l    vgram(a6),a3            * ò╧è╖î│
  677.     moveq.l    #0,d3
  678.     moveq.l    #0,d2
  679.     move.w    _line(a5),d2
  680.     swap.w    d2
  681.  
  682.     moveq.l    #0,d0
  683.     move.l    d0,d1
  684.     move.w    _colum(a5),d0
  685.     move.w    d0,d1
  686.     lsl.l    #3,d0        * 8ö{
  687.     sub.l    d1,d0
  688.     move.l    d0,colum8(a6)
  689.  
  690.     moveq.l    #0,d0
  691.     move.w    d1,d0
  692.     lsl.l    #2,d0        * 4ö{
  693.     sub.l    d1,d0
  694.     move.l    d0,colum4(a6)
  695.  
  696.     move.w    _line(a5),d1
  697.     subq.w    #1,d1
  698. @@:
  699.     bsr    timatima
  700.     bsr    address_chg
  701.  
  702.     dbra    d1,@b
  703.  
  704.     moveq.l    #0,d0
  705.     rts
  706.  
  707.  
  708. address_chg:
  709.     move.w    d2,d0
  710.     add.w    d0,d0
  711.     jmp    pass_tbl_(pc,d0.w)
  712.     rts
  713.  
  714. pass_tbl_:
  715.     bra.s    pass0_
  716.     bra.s    pass1_
  717.     bra.s    pass2_
  718.     bra.s    pass3_
  719.  
  720. pass0_:
  721.     swap.w    d2
  722.     addq.w    #8,d3
  723.     cmp.w    d3,d2
  724.     bhi.b    @f
  725.     swap.w    d2
  726.     addq.w    #1,d2
  727.     move.w    #4,d3
  728.         moveq.l    #0,d0
  729.         move.w    _colum(a5),d0
  730.         lsl.l    #2,d0        * éSö{
  731.         movea.l    interlace_trans_addr(a6),a4
  732.         adda.l    d0,a4
  733.     rts
  734. @@:
  735.     swap.w    d2
  736.     adda.l    colum8(a6),a4
  737.     rts
  738.  
  739. pass1_:
  740.     swap.w    d2
  741.     addq.w    #8,d3
  742.     cmp.w    d3,d2
  743.     bhi.b    @f
  744.     swap.w    d2
  745.     addq.w    #1,d2
  746.     move.w    #2,d3
  747.         moveq.l    #0,d0
  748.         move.w    _colum(a5),d0
  749.         lsl.l    #1,d0        * éQö{
  750.         movea.l    interlace_trans_addr(a6),a4
  751.         adda.l    d0,a4
  752.     rts
  753. @@:
  754.     swap.w    d2
  755.     adda.l    colum8(a6),a4
  756.     rts
  757.  
  758. pass3_:
  759.     addq.w    #2,d3
  760.     adda.w    _colum(a5),a4
  761.     rts
  762.  
  763. pass2_:
  764.     swap.w    d2
  765.     addq.w    #4,d3
  766.     cmp.w    d3,d2
  767.     bhi.b    @f
  768.     swap.w    d2
  769.     addq.w    #1,d2
  770.     move.w    #1,d3
  771.         movea.l    interlace_trans_addr(a6),a4
  772.         adda.w    _colum(a5),a4
  773.     rts
  774. @@:
  775.     swap.w    d2
  776.     adda.l    colum4(a6),a4
  777.     rts
  778.  
  779. timatima:
  780.     move.w    _colum(a5),d0
  781. @@:
  782.     sub.w    #256,d0
  783.     bmi    @f
  784.     bsr    tima
  785.     bra    @b
  786. @@:
  787.     add.w    #256,d0
  788.     move.w    #256,d4
  789.     sub.w    d0,d4
  790.     add.w    d4,d4
  791.     jmp    tima(pc,d4.w)
  792.     nop
  793.  
  794. tima:
  795.     .rept 256
  796.     move.b    (a3)+,(a4)+        * 030ê╚ì~é╠Élé╔é╞é┴é─é═ânâ^û└ÿfé╚âïü[âvôWèJ :-)
  797.     .endm
  798.     rts
  799.  
  800.  
  801. *------------------------------------------------------------------------------
  802. *
  803. *  âëâXâ^ü[âfü[â^ĵô╛
  804. *
  805.  
  806.  
  807. RasterGet:
  808.     movea.l    a1,a0
  809. rc_lop:
  810.     moveq.l    #0,d0
  811.     move.b    (a1)+,d0
  812.     beq    RasterCopy_end
  813.     cmp.l    _enddata_addr(a5),a1
  814.     bhi    ERROR_DESTROY
  815.     cmp.w    #$fe,d0
  816.     beq    rc_t
  817.     subq.w    #1,d0
  818. @@:    move.b    (a1)+,(a0)+
  819.     dbra    d0,@b
  820.     bra    rc_lop
  821. RasterCopy_end:
  822.     move.l    a1,next_readdata_addr(a6)
  823.     rts
  824.  
  825. rc_t:
  826.     .rept 254
  827.     move.b    (a1)+,(a0)+        * û{ôûé═é▒é▒é▄é┼é╖éΘòKùvé═é╚éóé╠é⌐éα :-)
  828.     .endm
  829.     bra    rc_lop
  830.  
  831.  
  832. *------------------------------------------------------------------------------
  833. *
  834. *  ëµæ£ôWèJîπüCé│éτé╔âfü[â^é¬éáéΘé⌐é╟éñé⌐üH
  835. *
  836. *  éáéΘé⌐é╟éñé⌐ÆméΘé╛é»é┼üCé│éτé╔ôWèJé╖éΘïCé═é╚éó :-)
  837. *
  838.  
  839. next_data_chk:
  840.         movea.l    next_readdata_addr(a6),a1
  841. next_data_chk_lop:
  842.         cmp.l    _enddata_addr(a5),a1
  843.         bhi    ÅIÆ[ïLìåé¬é╚éó
  844.         move.b    (a1)+,d0
  845.         cmp.b    #TRAILER,d0
  846.         beq    âfü[â^ÅIéφéΦ
  847.         cmp.b    #IMAGE_SEPARATOR,d0
  848.         beq    next_data
  849.         cmp.b    #EXT_INTRODUCER,d0
  850.         bne    ERROR_EXT
  851. @@:
  852.         addq.l    #1,a1        * ï@ö\ö╘ìåé═é╞é╬é╖üD
  853.         moveq.l    #0,d0
  854.         move.b    (a1)+,d0    * âfü[â^âTâCâY
  855. @@:        adda.w    d0,a1
  856.         move.b    (a1)+,d0    * âfü[â^âTâCâYüC0 é╛é┴é╜éτÅIù╣
  857.         bne    @b
  858.         bra    next_data_chk_lop
  859. âfü[â^ÅIéφéΦ
  860.         rts
  861.  
  862. next_data:
  863.         addq.w    #1,animated_gif(a0)    * No.?? ûçû┌é╠GIFé¬æ╢ì▌é╖éΘüD
  864.         rts
  865.  
  866.  
  867. *------------------------------------------------------------------------------
  868. *
  869. *  misc.
  870. *
  871.  
  872. getc:
  873.         move.w    _file(a5),-(sp)
  874.         .dc.w    $ff1b    * __GETC
  875.         addq.l    #2,sp
  876.         tst.l    d0
  877.         bmi    ERROR_LOAD
  878.         rts
  879.  
  880. * ÄΦö▓é½é╠ï╔Æn :-)
  881.  
  882. ERROR_EXT:
  883. ERROR_DESTROY:
  884. ERROR_LOAD:
  885. ÅIÆ[ïLìåé¬é╚éó:
  886.     moveq.l    #-1,d0
  887.     rts
  888.  
  889.     .bss
  890. gifwork:
  891.     ds.b    __gifworkend
  892.     .end
  893.